const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs').promises; // 使用 promises API
const path = require('path');

const app = express();

app.use(bodyParser.json()); // 解析 JSON 格式的请求体
app.use(bodyParser.urlencoded({ extended: true })); // 解析 URL-encoded 格式的请求体

const dbFilePath = path.join(__dirname, 'db.json'); // 数据库文件路径

// 读取数据库
async function readDb() {
    try {
        const data = await fs.readFile(dbFilePath, 'utf-8');
        return JSON.parse(data);
    } catch (error) {
        // 如果文件不存在，则返回初始数据结构
        return { users: [] };
    }
}

// 写入数据库
async function writeDb(data) {
    await fs.writeFile(dbFilePath, JSON.stringify(data, null, 2));
}

(async () => {
    const db = await readDb(); // 读取数据

    /**
     * @api {get} /register 注册用户
     * @apiName RegisterUser
     * @apiGroup User
     * 
     * @apiParam {String} username 用户名
     * @apiParam {String} password 密码
     * 
     * @apiSuccess {String} message 注册成功信息
     * 
     * @apiError {String} message 错误信息
     */
    app.get('/register', async (req, res) => {
        const { username, password } = req.query; // 从查询参数中获取
        const user = db.users.find(user => user.username === username);

        if (user) {
            res.status(400).json({ message: '用户已存在' });
        } else {
            db.users.push({ username, password });
            await writeDb(db); // 写入数据
            res.json({ message: '注册成功' });
        }
    });

    /**
     * @api {get} /login 用户登录
     * @apiName LoginUser
     * @apiGroup User
     * 
     * @apiParam {String} username 用户名
     * @apiParam {String} password 密码
     * 
     * @apiSuccess {String} message 登录成功信息
     * 
     * @apiError {String} message 错误信息
     */
    app.get('/login', async (req, res) => {
        const { username, password } = req.query; // 从查询参数中获取
        const user = db.users.find(user => user.username === username && user.password === password);

        if (user) {
            res.json({ message: '登录成功' });
        } else {
            res.status(400).json({ message: '用户名或密码错误' });
        }
    });

    app.listen(3000, () => {
        console.log('服务器已启动，端口3000');
    });
})();
